home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / workqueue.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  94 lines

  1. /*
  2.  * workqueue.h --- work queue handling for Linux.
  3.  */
  4.  
  5. #ifndef _LINUX_WORKQUEUE_H
  6. #define _LINUX_WORKQUEUE_H
  7.  
  8. #ifdef __KERNEL__
  9.  
  10. #include <linux/timer.h>
  11. #include <linux/linkage.h>
  12. #include <linux/bitops.h>
  13.  
  14. struct workqueue_struct;
  15.  
  16. struct work_struct {
  17.     unsigned long pending;
  18.     struct list_head entry;
  19.     void (*func)(void *);
  20.     void *data;
  21.     void *wq_data;
  22.     struct timer_list timer;
  23. };
  24.  
  25. #define __WORK_INITIALIZER(n, f, d) {                \
  26.         .entry    = { &(n).entry, &(n).entry },            \
  27.     .func = (f),                        \
  28.     .data = (d),                        \
  29.     .timer = TIMER_INITIALIZER(NULL, 0, 0),            \
  30.     }
  31.  
  32. #define DECLARE_WORK(n, f, d)                    \
  33.     struct work_struct n = __WORK_INITIALIZER(n, f, d)
  34.  
  35. /*
  36.  * initialize a work-struct's func and data pointers:
  37.  */
  38. #define PREPARE_WORK(_work, _func, _data)            \
  39.     do {                            \
  40.         (_work)->func = _func;                \
  41.         (_work)->data = _data;                \
  42.     } while (0)
  43.  
  44. /*
  45.  * initialize all of a work-struct:
  46.  */
  47. #define INIT_WORK(_work, _func, _data)                \
  48.     do {                            \
  49.         INIT_LIST_HEAD(&(_work)->entry);        \
  50.         (_work)->pending = 0;                \
  51.         PREPARE_WORK((_work), (_func), (_data));    \
  52.         init_timer(&(_work)->timer);            \
  53.     } while (0)
  54.  
  55. extern struct workqueue_struct *__create_workqueue(const char *name,
  56.                             int singlethread);
  57. #define create_workqueue(name) __create_workqueue((name), 0)
  58. #define create_singlethread_workqueue(name) __create_workqueue((name), 1)
  59.  
  60. extern void destroy_workqueue(struct workqueue_struct *wq);
  61.  
  62. extern int FASTCALL(queue_work(struct workqueue_struct *wq, struct work_struct *work));
  63. extern int FASTCALL(queue_delayed_work(struct workqueue_struct *wq, struct work_struct *work, unsigned long delay));
  64. extern void FASTCALL(flush_workqueue(struct workqueue_struct *wq));
  65.  
  66. extern int FASTCALL(schedule_work(struct work_struct *work));
  67. extern int FASTCALL(schedule_delayed_work(struct work_struct *work, unsigned long delay));
  68.  
  69. extern int schedule_delayed_work_on(int cpu, struct work_struct *work, unsigned long delay);
  70. extern void flush_scheduled_work(void);
  71. extern int current_is_keventd(void);
  72. extern int keventd_up(void);
  73.  
  74. extern void init_workqueues(void);
  75.  
  76. /*
  77.  * Kill off a pending schedule_delayed_work().  Note that the work callback
  78.  * function may still be running on return from cancel_delayed_work().  Run
  79.  * flush_scheduled_work() to wait on it.
  80.  */
  81. static inline int cancel_delayed_work(struct work_struct *work)
  82. {
  83.     int ret;
  84.  
  85.     ret = del_timer_sync(&work->timer);
  86.     if (ret)
  87.         clear_bit(0, &work->pending);
  88.     return ret;
  89. }
  90.  
  91. #endif /* __KERNEL__ */
  92.  
  93. #endif
  94.